在 PostgreSQL 上 GIST 索引创建速度太慢
GIST index creation too slow on PostgreSQL
我在 PostgreSQL 中有一个具有以下结构的数据库:
Column | Type | Collation | Nullable | Default
-------------+-----------------------+-----------+----------+------------------------------------------------
vessel_hash | integer | | not null | nextval('samplecol_vessel_hash_seq'::regclass)
status | character varying(50) | | |
station | character varying(50) | | |
speed | character varying(10) | | |
longitude | numeric(12,8) | | |
latitude | numeric(12,8) | | |
course | character varying(50) | | |
heading | character varying(50) | | |
timestamp | character varying(50) | | |
the_geom | geometry | | |
Check constraints:
"enforce_dims_the_geom" CHECK (st_ndims(the_geom) = 2)
"enforce_geotype_geom" CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL)
"enforce_srid_the_geom" CHECK (st_srid(the_geom) = 4326)
数据库包含 ~146.000.000 条记录,包含数据的 table 的大小为:
public | samplecol | table | postgres | 31 GB |
我尝试使用以下命令在几何字段 the_geom
上创建 GIST 索引:
create index samplecol_the_geom_gist on samplecol using gist (the_geom);
但耗时太长。它已经运行了 2 个小时。
基于这个问题300GB Postgis 的缓慢索引table
问问题,在创建索引之前我在psql控制台执行:
ALTER SYSTEM SET maintenance_work_mem = '1GB';
ALTER SYSTEM
SELCT pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
但是创建索引的时间太长了。有谁知道为什么?如何解决这个问题?
恐怕你得坐等了。
除了高 maintenance_work_mem
之外,没有真正的调整选项。
增加 max_wal_size
会有所帮助,因为您会得到更少的检查点。
如果您不能忍受 ACCESS EXCLUSIVE
锁那么久,请尝试 CREATE INDEX CONCURRENTLY
,这会更慢,但不会阻塞并发数据库 activity。
我在 PostgreSQL 中有一个具有以下结构的数据库:
Column | Type | Collation | Nullable | Default
-------------+-----------------------+-----------+----------+------------------------------------------------
vessel_hash | integer | | not null | nextval('samplecol_vessel_hash_seq'::regclass)
status | character varying(50) | | |
station | character varying(50) | | |
speed | character varying(10) | | |
longitude | numeric(12,8) | | |
latitude | numeric(12,8) | | |
course | character varying(50) | | |
heading | character varying(50) | | |
timestamp | character varying(50) | | |
the_geom | geometry | | |
Check constraints:
"enforce_dims_the_geom" CHECK (st_ndims(the_geom) = 2)
"enforce_geotype_geom" CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL)
"enforce_srid_the_geom" CHECK (st_srid(the_geom) = 4326)
数据库包含 ~146.000.000 条记录,包含数据的 table 的大小为:
public | samplecol | table | postgres | 31 GB |
我尝试使用以下命令在几何字段 the_geom
上创建 GIST 索引:
create index samplecol_the_geom_gist on samplecol using gist (the_geom);
但耗时太长。它已经运行了 2 个小时。
基于这个问题300GB Postgis 的缓慢索引table 问问题,在创建索引之前我在psql控制台执行:
ALTER SYSTEM SET maintenance_work_mem = '1GB';
ALTER SYSTEM
SELCT pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
但是创建索引的时间太长了。有谁知道为什么?如何解决这个问题?
恐怕你得坐等了。
除了高 maintenance_work_mem
之外,没有真正的调整选项。
增加 max_wal_size
会有所帮助,因为您会得到更少的检查点。
如果您不能忍受 ACCESS EXCLUSIVE
锁那么久,请尝试 CREATE INDEX CONCURRENTLY
,这会更慢,但不会阻塞并发数据库 activity。